import logging
from pathlib import Path
from tools.decorators import log_decorator
from tools.page import page_get_no
import pandas as pd
from tools.滑块验证码 import 滑块验证码


@log_decorator
def 获取投诉数据(shopname, login, password, port, date, date_start):
    Path(f'C:/投诉模板/{date}').mkdir(exist_ok=True)
    for _ in range(5):
        try:
            if Path(f'C:/投诉模板/{date}/{shopname}.xlsx').exists():
                logging.info(f'C:/投诉模板/{date}/{shopname}.xlsx已存在')
                return
            page = page_get_no(port, f'C:\\{port}')
            page.get('https://loginmyseller.taobao.com/')
            page('#fm-login-id').input(login)
            page('#fm-login-password').input(password)
            page.wait(5)
            滑块验证码(page,350)
            page('.fm-button fm-submit password-login').click()
            page.wait(3)
            page.get('https://myseller.taobao.com/home.htm/shenshu')
            page.wait(5)
            滑块验证码(page, 260)
            if page('.UserArea--shopName--3Z5NVbD').text != shopname:
                logging.error(f'账号错乱')
                raise Exception('账号错乱')
            page('#listManualQueryFormBlock_1@3').ele('t:input').click(by_js=True)
            page.wait(1)
            page('.rc-calendar-input  ').input(date_start, clear=True)  # 输入要抓取的起始日期
            page('.rc-time-picker-input').input('00:00:00', clear=True)
            page('.rc-calendar-ok-btn').click(by_js=True)
            page('x://*[@id="listManualQueryFormBlock_1@3"]/div[2]/span/input').click(by_js=True)
            page.wait(1)
            page('.rc-calendar-input  ').input(date, clear=True)  # 输入要抓取的结束日期
            page('.rc-time-picker-input').click(by_js=True)
            page.wait(1)
            page.actions.input('23:59:59')
            page('.rc-calendar-ok-btn').click(by_js=True)
            page('点击查询').click(by_js=True)
            page.wait(3)
            columns_names = ['日期', '店铺', '订单编号', '产品ID', '产品', '投诉类型', '投诉结果', '是否自动介入',
                             '是否平台任务发出投诉', '具体原因', '部门', '责任人', '赔付金额']
            df = pd.DataFrame(columns=columns_names)
            count = 1
            while True:
                logging.info(f'开始抓第{count}页')
                tr_eles = page.eles('.mod-container container apply-listGridContainer', timeout=2)
                if not tr_eles:
                    logging.info('超过千牛可显示最大页数')
                    break
                if tr_eles[0].s_eles('.mod-dispute-body listGridBody apply-listGridBodyBlock'):
                    for index, td_ele in enumerate(tr_eles):
                        日期 = td_ele('.mod-dispute-body listGridBody apply-listGridBodyBlock').child(3).ele(
                            't:span').text
                        店铺 = shopname
                        订单编号 = td_ele('.mod-dispute-header listGridHeader apply-listGridHeaderBlock').ele(
                            '.link value-holder').ele('.copy-container').child(1).text
                        产品ID = td_ele('.mod-dispute-header listGridHeader apply-listGridHeaderBlock').ele(
                            '@@class=value-holder@@data-index=2').ele('.copy-container').child(1).text
                        产品 = td_ele('.mod-dispute-body listGridBody apply-listGridBodyBlock').ele('.hand title').text
                        投诉类型 = td_ele('.mod-dispute-body listGridBody apply-listGridBodyBlock').child(4).ele(
                            't:span').text
                        投诉结果 = td_ele('.mod-dispute-body listGridBody apply-listGridBodyBlock').child(5).ele(
                            't:font').text
                        tab = td_ele('.mod-dispute-body listGridBody apply-listGridBodyBlock').child(5).ele(
                            't:font').click.for_new_tab(by_js=True)
                        # tab = page.get_tab(page.latest_tab)
                        html = tab.html
                        if '卖家提供协商方案' in html or '经平台核实确认' in html:
                            是否自动介入 = '否'
                        else:
                            是否自动介入 = '是'
                        if '任务链接' in html:
                            是否平台任务发出投诉 = '是'
                        else:
                            是否平台任务发出投诉 = '否'
                        具体原因 = ''
                        部门 = ''
                        责任人 = ''
                        if tab('.value highlight', timeout=2):
                            赔付金额 = tab('.value highlight').child(2).text
                        else:
                            赔付金额 = '0'
                        data = {
                            '日期': 日期,
                            '店铺': 店铺,
                            '订单编号': 订单编号,
                            '产品ID': 产品ID,
                            '产品': 产品,
                            '投诉类型': 投诉类型,
                            '投诉结果': 投诉结果,
                            '是否自动介入': 是否自动介入,
                            '是否平台任务发出投诉': 是否平台任务发出投诉,
                            '具体原因': 具体原因,
                            '部门': 部门,
                            '责任人': 责任人,
                            '赔付金额': 赔付金额
                        }
                        df = df._append(data, ignore_index=True)
                        tab.close()
                    if page('. rc-pagination-next', timeout=2):
                        page('. rc-pagination-next').click(by_js=True)
                        page.wait(2)
                        count += 1
                    else:
                        logging.info('没有下一页了')
                        break
                else:
                    logging.info('没有数据')
                    break
            logging.info('导出excel表')
            df.to_excel(f'C:/投诉模板/{date}/{shopname}.xlsx', index=False)
            page.quit()
            logging.info(f'{shopname}投诉数据抓取成功')
            return '投诉数据抓取成功'
        except Exception as e:
            # page.quit()
            logging.error(e)
    logging.error('投诉数据抓取失败')
    raise Exception('投诉数据抓取失败')
